#include <math.h>
#include <iostream>
using namespace std;

/*定义一个点Point类，数据成员是横纵坐标（float）；
定义一个颜色类Color数据成员只有颜色（char*）；
一个直线类Line，数据成员是两个Point对象，表示起点和终点（即Point两个对象为Line的内嵌对象）；
一个三角形类Triangle，继承自Line和Color，数据成员有三角形的高heigh
t（float），三角形理解成以基类Color为颜色，以基
类直线为底，以height为高的直角三角形，(即直线和高分别为两条直角边)
请实现相关函数，计算三角形的颜色、周长和面积并给出相关输出
*/
class Point{
public:
    Point(float x,float y)
    :_x(x)
    ,_y(y)
    {

    }
    float _x;
    float _y;
    //计算到另一个点的距离
    double distance(const Point &rhs)const{
        return sqrt(pow(_x-rhs._x,2)+pow(_y-rhs._y,2));
    }
};
class Color{
    public:

        Color( const string & color)
        :_color(color)
        {

        }
    string _color;

};
class Line:public Point{
public:
    Line(float x,float y,float z,float a)
    :Point(x,y)
    ,end(z,a)
    {
    }
    Point end;

    float length(){
        return distance(end);
    }
};
class Triangle:public Line,public Color{
public:
    Triangle(float x,float y,float z,float a,const  string&  color,float height)
    :Line(x,y,z,a)
    ,Color(color)
    ,_height(height)
    {

    }
    float Perimeter(){
    int a=length();
    return (a+_height+sqrt(a*a+_height*_height));
    }
    float area(){
    int a=length();
    return (a*_height)/2;
    }
    void print(){
        cout<<area()<<endl;
    }
    friend ostream & operator<<(ostream & os,Triangle & tri);
private:
float _height;
};
ostream & operator<<(ostream & os,Triangle & tri){
    cout<<"颜色"<<tri._color<<endl<<"周长"<<tri.Perimeter()
        <<endl<<"面积"<<tri.area();
    return os;
}
void test(){
    Triangle tri(0,1,4,1,"red",4);
    cout<<tri<<endl;
}
int main(int argc, char * argv[]){
    test();
    return 0;
}

